const userService = require("../../service/admin/user");
const JWT = require("../../utils/JWT");

const userController = {
  login: async (req, res) => {
    // 解析用戶名和密碼
    const { username, password } = req.body;

    // 登录逻辑
    const result = await userService.login(username, password);
    if (!result) {
      res.send({
        code: 401,
        message: "账号或密码错误",
      });
    } else {
      // 生成token（包含用户角色信息）
      const token = JWT.generate(
        {
          id: result._id,
          username: result.username,
          role: result.role || 'user', // 用户角色
        },
        "48h"
      );
      // 挂载到请求头
      res.header("Authorization", token);
      // 返回登录成功信息
      res.send({
        code: 200,
        message: "登录成功",
        token: token,
        role: result.role || 'user', // 返回角色信息给前端
      });
    }
  },

  // 获取个人详情
  getUserInfo: async (req, res) => {
    // 从 JWT token 中获取当前登录用户的 ID
    const userID = req.adminUser.id;
    const result = await userService.getUserInfo(userID);
    result.avatar = process.env.SERVER_BASE_URL + result.avatar;
    res.send({
      code: 200,
      message: "获取个人信息成功",
      data: result,
    });
  },

  // 修改个人信息
  updateUserInfo: async (req, res) => {
    console.log(req.body);
    console.log(req.file);
    // 强制使用当前登录用户的 ID，防止伪造
    req.body._id = req.adminUser.id;
    const result = await userService.updateUserInfo(req.body, req.file);

    // 返回修改个人信息成功信息
    res.send({
      code: 200,
      message: "修改个人信息成功",
    });
  },

  //修改密码
  updateUserPassWord: async (req, res) => {
    // 强制使用当前登录用户的 ID，防止伪造
    req.body._id = req.adminUser.id;
    const result = await userService.updateUserPassWord(req.body);

    // 返回修改密码成功信息
    res.send({
      code: 200,
      message: "修改密码成功",
    });
  },

  //修改密码前校验
  checkUpdataPassWord: async (req, res) => {
    // 强制使用当前登录用户的 ID，防止伪造
    req.body._id = req.adminUser.id;
    const result = await userService.checkUpdataPassWord(req.body);

    // 如果没有查到数据，返回校验错误
    if (!result) {
      res.send({
        code: 400,
        data: false,
      });
    } else {
      // 返回校验成功信息
      res.send({
        code: 200,
        data: true,
      });
    }
  },
};

module.exports = userController;
